package com.crcchem.practice.demos.web.config;

import com.crcchem.practice.demos.web.interceptor.JwtInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;

/**
 * @projectName: code-training
 * @package: com.crcchem.practice.demos.web.config
 * @className: WebConfig
 * @author: 李富强
 * @description: TODO
 * @date: 2025/8/21 15:07
 * @version: 1.0
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Resource
    private JwtInterceptor jwtInterceptor;

    /**
     * addPathPatterns 和 excludePathPatterns 控制的是拦截器的执行范围（拦截器是否会触发）；
     * 而拦截器内部逻辑的判断（如 url.contains("/login")）则控制的是具体的放行与否。
     * 这两者并不冲突，而是两道不同层次的控制：
     * 路径配置控制整体拦截范围；
     * 内部逻辑则灵活控制每个请求具体的行为（登录状态、权限检查等）。
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jwtInterceptor)
                // 第一种方式：拦截所有，放行指定接口
                /**
                 // 拦截所有
                 .addPathPatterns("/**")
                 // 接口放行
                 .excludePathPatterns(
                 "/auth/login",
                 "/Cookie/**",
                 "/Session/**",
                 "/Token/**",
                 "/JWT/**"
                 */
                // 第二种方式
                // 拦截指定接口
                .addPathPatterns("/auth/**")
                // 放行指定接口下的子指定接口
                .excludePathPatterns(
                        "/auth/login"
                );
    }
}
